package com.vhall.component.service.redpacket.service;

import com.alibaba.fastjson.JSONObject;
import com.vhall.component.entity.redpacket.vo.*;
import com.vhall.component.plugin.common.support.VssToken;

/**
 * @author xuyongzheng
 * @since 2021/2/25 10:33
 **/
public interface RedPacketService {
    /**
     * 创建红包
     *
     * @param
     * @return
     */
    RedPacketCreateRspVO create(VssToken token, RedPacketCreateReqVO reqVO);


    /**
     * 抢红包
     *
     * @param
     * @param extension
     * @return
     */
    RedPacketGetRspVO snatch(RedPacketJoinVO reqVO, JSONObject unlock, String extension);


    /**
     * 参加红包活动
     *
     * @param
     * @return
     */
    RedPacketJoinRspVO join(RedPacketJoinVO reqVO, JSONObject unlock);


    /**
     * 根据业务ID获取当前未结束的红包信息
     *
     * @param
     * @return
     */
    RedPacketVO getInfoBySourceId(OverBySourceIdReqVO reqVO);

    /**
     * 根据业务ID获取红包列表
     *
     * @param reqVO 参数
     * @return 返回值
     */
    GetListRspVO listPacket(GetListReqVO reqVO);

    /**
     * 获取红包统计数据
     *
     * @param
     * @return
     */
    RedPacketStatRspVO getStat(RedPacketStatReqVO reqVO);

    /**
     * 获取红包信息接口
     *
     * @param vo param
     * @return rsp vo
     */
    RedPacketVO getInfo(ReqVo vo);

    /**
     * 红包解锁
     *
     * @param
     * @return
     */
    Boolean unLock(RedPacketUnLockReqVO reqVO);

    /**
     * 设置红包支付状态
     *
     * @param reqVO 参数
     * @return 返回值
     */
    RedPacketRspVO payStatusSet(PayStatusSetReqVO reqVO);

    /**
     * 获取我抢到的单个红包信息
     *
     * @param appId         应用id
     * @param redPacketUuid 红包uuid
     * @return 返回值
     */
    RedPacketVO getRowByRedPacketUuid(String appId, String redPacketUuid);

    /**
     * 获取我抢到的单个红包信息
     *
     * @param vo 参数
     * @return 返回值
     */
    RedPacketGetMyInfoRspVO getMyInfo(RedPacketGetMyInfoReqVO vo);

    /**
     * 获取房间内最新的一个红包信息
     *
     * @param vo 参数
     * @return 返回值
     */
    RedPacketGetLastInfoRspVO getLastInfo(RedPacketGetLastInfoReqVO vo);

    /**
     * 获取红包的领取记录列表
     *
     * @param vo 参数
     * @return 返回值
     */
    RedPacketGetRecordsRspVO getRecords(RedPacketGetRecordsReqVO vo);
}
